﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using GestionIncidencias.Models;

namespace GestionIncidencias.Controllers
{
    public class CasoController : Controller
    {
        private List<Caso> CrearCaso()
        {
            /*Carga inicial de Clientes*/
            Cliente cliente1 = new Cliente() { Codigo = 1, Area = "Contabilidad", Nombre = "Jose", Apellido = "Rosemberg", Usuario = "jcro", Contrasena = "123" };
            Cliente cliente2 = new Cliente() { Codigo = 2, Area = "Logistica", Nombre = "Jorge Luis", Apellido = "Diaz", Usuario = "jldiaz", Contrasena = "12345" };

            /*Carga inicial de Servicios*/
            Servicio servicio1 = new Servicio() { Codigo = 1, Nombre = "SAP R3 Supermercados", Descripcion = "Sistema Comercial de Supermercados" };
            Servicio servicio2 = new Servicio() { Codigo = 2, Nombre = "SAP R3 Recursos Humanos", Descripcion = "Sistema de Recursos Humanos" };
            Servicio servicio3 = new Servicio() { Codigo = 3, Nombre = "Sistema de Promociones", Descripcion = "Sistema de Promociones para Línea de Cajas" };

            /*Carga inicial de Tecnico*/


            Tecnico tecnico1 = new Tecnico() { Codigo = 1, Nombre = "Juan", Apellido = "Rojas", Especialidad = "Tecnico de Microinformática" };
            Tecnico tecnico2 = new Tecnico() { Codigo = 2, Nombre = "Jorge", Apellido = "Salazar", Especialidad = "Desarollador WEB" };
            Tecnico tecnico3 = new Tecnico() { Codigo = 3, Nombre = "Raquel", Apellido = "Espinoza", Especialidad = "Adiministrador SAP Basis" };
            Tecnico tecnico4 = new Tecnico() { Codigo = 4, Nombre = "Rafael", Apellido = "Santos", Especialidad = "Analista Funcional SAP Retail" };

            List<Caso> casos = new List<Caso>();
            casos.Add(new Caso() { NroTicket = 1, Cliente = cliente1, Servicio = servicio1, Tipo = "Incidencia", Estado = "Resuelto", Tecnico = tecnico1, FechaTicket = DateTime.Today, Descripcion = "Error de cpu" });
            casos.Add(new Caso() { NroTicket = 2, Cliente = cliente2, Servicio = servicio1, Tipo = "Incidencia", Estado = "Resuelto", Tecnico = tecnico2, FechaTicket = DateTime.Today, Descripcion = "Error de aplicación" });
            casos.Add(new Caso() { NroTicket = 3, Cliente = cliente1, Servicio = servicio1, Tipo = "Incidencia", Estado = "Resuelto", Tecnico = tecnico3, FechaTicket = DateTime.Today, Descripcion = "Error de aplicación" });
            casos.Add(new Caso() { NroTicket = 4, Cliente = cliente2, Servicio = servicio1, Tipo = "Requerimiento", Estado = "Abierto", Tecnico = tecnico4, FechaTicket = DateTime.Today, Descripcion = "Instalar Office" });
            return casos;
        }
        private Caso ObtenerCaso(int nroticket)
        {
            List<Caso> casos = (List<Caso>)Session["casos"];
            Caso model = casos.Single(delegate(Caso caso)
            {
                if (caso.NroTicket == nroticket) return true;
                else return false;
            });
            return model;
        }
        public ActionResult Index()
        {
            if (Session["casos"] == null)
                Session["casos"] = CrearCaso();
            List<Caso> model = (List<Caso>)Session["casos"];
            return View(model);
        }
        public ActionResult Details(int id)
        {
            Caso model = ObtenerCaso(id);
            return View(model);
        }


        // GET: /Caso/Create
        public ActionResult Create()
        {
            return View();
        }
        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    List<Caso> casos = (List<Caso>)Session["casos"];
                    casos.Add(new Caso()
                    {
                        NroTicket = int.Parse(collection["NroTicket"]),
                        Cliente = new Cliente()
                        {
                            Codigo = int.Parse(collection["Cliente.Codigo"]),
                            Area = collection[("Cliente.Area")],
                            Nombre = collection[("Cliente.Nombre")],
                            Apellido = collection[("Cliente.Apellido")],
                            Usuario = collection[("Cliente.Usuario")],
                            Contrasena = collection[("Cliente.Contrasena")]
                        },
                        Servicio = new Servicio()
                        {
                            Codigo = int.Parse(collection["Servicio.Codigo"]),
                            Nombre = collection[("Servicio.Nombre")],
                            Descripcion = collection[("Servicio.Descripcion")],
                        },
                        Tipo = collection[("Casos.Tipo")],
                        Estado = collection[("Casos.Estado")],
                        Tecnico = new Tecnico()
                        {
                            Codigo = int.Parse(collection["Tecnico.Codigo"]),
                            Nombre = collection[("Servicio.Nombre")],
                            Apellido = collection[("Servicio.Apellido")],
                            Especialidad = collection[("Servicio.Especialidad")],
                        },
                        FechaTicket = DateTime.Parse(collection[("Servicio.FechaTicket")]),
                        FechaCierre = DateTime.Parse(collection[("Servicio.FechaCierre")]),
                        Solucion = collection[("Casos.Solucion")],
                        Descripcion = collection[("Casos.Descripcion")],
                        Evaluacion = collection[("Casos.Evaluacion")],
                        ComentarioSolucion = collection[("Casos.ComentarioSolucion")]
                    });
                    return RedirectToAction("Index");
                }
                catch
                {
                }
            }
                return View();            
        }


        // GET: /Caso/Edit/5
        public ActionResult Edit(int id)
        {
            Caso model = ObtenerCaso(id);
            return View(model);
        }
        // POST: /Caso/Edit/5
        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    Caso model = ObtenerCaso(id);
                    model.NroTicket = int.Parse(collection["NroTicket"]);
                    model.Tipo = collection[("Casos.Tipo")];
                    model.Estado = collection[("Casos.Estado")];
                    model.FechaTicket = DateTime.Parse(collection[("Servicio.FechaTicket")]);
                    model.FechaCierre = DateTime.Parse(collection[("Servicio.FechaCierre")]);
                    model.Solucion = collection[("Casos.Solucion")];
                    model.Descripcion = collection[("Casos.Descripcion")];
                    model.Evaluacion = collection[("Casos.Evaluacion")];
                    model.ComentarioSolucion = collection[("Casos.ComentarioSolucion")];
                    return RedirectToAction("Index");
                }
                catch
                {
                }
            }
                return View();
        }


        // GET: /Caso/Delete/5

        public ActionResult Delete(int id)
        {
            Caso model = ObtenerCaso(id);
            return View(model);
        }

        //
        // POST: /Caso/Delete/5

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                List<Caso> casos = (List<Caso>)Session["casos"];
                casos.Remove(ObtenerCaso(id));
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
    }
}